﻿//---------------------------------------------------------------------------
/**
\file xmlreader.h
\author Tobias Miller
\brief Definition XmlReader
*/

#ifndef xmlreaderH
#define xmlreaderH

#include <tinyxml.h>	//TinyXml-Header
#include <exception>
#include <string>
#include <stdlib.h>
#include "offsideline.h"


typedef enum {

	SWENPAPP_EXC_IO_ERROR,
	SWENPAPP_EXC_EOF,
	SWENPAPP_EXC_NO_DATASET

} eSwenPExcType;

/**
\author Tobias Miller
\brief Exceptionandling
*/
class ESwenPApp : public std::exception
{
	public:

	/**
	\author Tobias Miller
	\param[in] msg Nachricht
	*/
	ESwenPApp(const std::string& msg)
		: tMsg(msg)
	{

	}

	ESwenPApp(const std::string& msg, const eSwenPExcType type)
		: tMsg(msg), tExcType(type)
	{

	}

	eSwenPExcType getType() const
	{
        return tExcType;
    }

	/**
	\author Tobias Miller
	\brief Getter Nachricht
	\return Nachricht
	*/
	const char* what() const
	{
		return tMsg.c_str();
	}

	private:
	const std::string	tMsg;
	const eSwenPExcType	tExcType;
};

/**
\class XmlReader
\author Tobias Miller
\brief Lädt XML-Datei mit Liniendaten.

Implementiert Funktionalität, um sequenziell Linien-Datensätze
mit Bildnummer als Zugriffsschlüssel auszulesen.
*/
class XmlReader : public TiXmlDocument
{
	public:
	XmlReader();
	~XmlReader();


	/**
	  \author Tobias Miller
	  \brief Liest Linien-Datensatz aus Datei.
	  \param[in] frame Bildnummer

	  \return Eine Linien-Klasse \see Line
	*/
	OffsideLine getLineData(unsigned int frame);

	/**
	  \author Tobias Miller
	  \brief Setzt internen Bildindex zurück.
	*/
	void resetFrmNr();


	/**
	  \brief XML-Datei laden
	  \para[const wchar_t] Dateiname

	  \return Erfolg
	*/
	bool LoadFile( const wchar_t* filen);

	/**
	  \author Tobias Miller
	  \brief XML-Datei laden
	  \return Aktuelle Bildnummer
	*/
	unsigned int getCurFrameNr() const;

	private:
	const TiXmlElement*	ptElmPtr;		/*< Zeiger auf akt. Element in Baum*/
	unsigned int		uiCurFrameNr;	/*< Zähler Bildnummer */
};

//---------------------------------------------------------------------------
#endif

